#include <iostream>
#include<string>
using namespace std;
void Test_1()
{
    //cout<<string ("hello").size();//这个说名类string就是一个类
    string d1;//构造但是里面存的都是/0
    cout<<d1.size()<<' '<<d1.capacity()<<endl;

    string d2("Hello World");//直接中串
    cout<<d2.size()<<' '<<d2.capacity()<<endl;


    string d3(10,'H');//可以重复用单个字符构造一个串
    cout<<d3.size()<<' '<<d3.capacity()<<endl;

    string d4(d2);//用类
    cout<<d4.size()<<' '<<d4.capacity()<<endl;



    //没有缺省参数构造
}
void Test_2()
{

    string d1;
    cout<<d1.size()<<" ";
    cout<<d1.capacity()<<endl;
    string d2("hello world");
    cout<<d2.size()<< " ";
    cout<<d2.capacity()<<endl;
    //这里可以看看出不管是否给串其实都会开空间

    cout<<"----------------------------------"<<endl;
    string a1("hello world");
    cout<<a1.size()<<endl;//这个接口后面链表之类的都适用
    cout<<a1.length()<<endl;//只适用与串


    a1.clear();//清除串中的内容，让他变成一个空string
    cout<<a1.size()<<endl;



    cout<<"----------------------------"<<endl;
    string a2("hello world");
    string a3;
    cout<<a2.empty()<<" ";
    cout<<a3.empty()<<endl;



    cout<<"----------------------------"<<endl;

    string a5("hello world");
    cout<<"first"<<a5.size()<<endl;
    a5.reserve(40);
    cout<<"second"<<a5.size()<<endl;
    a5.reserve(1);
    cout<<"third"<<a5.size();


     string a6("hello world");
    cout<<"first"<<a6.capacity()<<endl;
     a6.resize(100);
    cout<<"second"<<a6.capacity()<<endl;

//直接对串进行背数的增大与减小
//reserve是直接开直接切
//resize是开辟初始化，在直接切
    cout<<"----------------------------"<<endl;

}

void Test_3()
{
    string b1("hello world");
    //[]访问
    for(int i=0;i<b1.size();i++)
    {
        cout<<b1[i]<<" ";//read
    }
    cout<<endl;
    for(int i=0;i<b1.size();i++)
    {
        b1[i]+=1;//write
        cout<<b1[i]<<" ";//read
    }
    cout<<endl;

    //迭代器
    string::iterator itB=b1.begin();
    while(itB<b1.end())
    {
        cout<<*itB++<<" ";
    }
    cout<<endl;
    itB=b1.begin();
    while(itB<b1.end())
    {
       *itB=*itB-1;
        cout<<*itB++<<" ";
    }

    printf("范围for\n");
//范围for
for(auto e:b1)
{
   cout<<e<<' ';
}
cout<<endl;
    for(auto &e:b1)
    {
        e++;
        cout<<e<<' ';
    }

}


void Test_4()
{
    string d1("Hello World");
    d1+='+';
    d1+="hello";
    cout<<d1<<endl;

    cout<<"_____________________________"<<endl;
    d1.push_back('+');//尾查一个字符
    d1.append("world");//尾巴查一个串

    cout<<"_____________________________"<<endl;
    printf("%s",d1.c_str());//返回这个string的began地址

}

void Test_5()
{
    string d1("http://www.cplusplus.com/reference/string/string/append/");
    size_t tmp=d1.find("/");
    string d2=d1.substr(0,tmp);
    size_t tmp2=d1.find('/',tmp+2);



    string d3=d1.substr(tmp+2,(tmp2-(tmp+2)));
    //给头，在给获取多少个字节数
    cout<<d2<<' '<<d3;
}

void Test_6()
{
    string d1("hello ");

    size_t  tmp=d1.rfind('h');

}
//int main()
//{
//
//    //Test_1();
//   // Test_2();
//  // Test_3();
//     //Test_4();
//
//    // Test_5();
//    //Test_6();
//
//
//    string d1("hello nowcoder");
//    cout<<d1.size();
//  return 0;
//}





//
//int main()
//{
//    string d1;
//    getline(cin, d1);
//
//    size_t tmp = d1.rfind(' ');
//    cout << d1.size() -(tmp+1);
//}


int main()
{

    printf("%c",'a'+'a');

}
